package com.miguo.plugins;

import java.util.HashMap;
import java.util.Properties;

import android.content.Context;

import com.miguo.app.AppConfig;
import com.tencent.stat.StatConfig;
import com.tencent.stat.StatReportStrategy;
import com.tencent.stat.StatService;
import com.umeng.analytics.MobclickAgent;

/*
 * 腾讯统计
 * http://mta.qq.com
 */
public class Statistics {

	// 1 INSTANT 实时发送，app每产生一条消息都会发送到服务器。
	// 2 ONLY_WIFI 只在wifi状态下发送，非wifi情况缓存到本地。
	// 3 BATCH 批量发送，默认当消息数量达到30条时发送一次。
	// 4 APP_LAUNCH 只在启动时发送，本次产生的所有数据在下次启动时发送。
	// 5 DEVELOPER 开发者模式，只在app调用void commitEvents(Context)时发送，否则缓存消息到本地。
	// 6 PERIOD 间隔一段时间发送，每隔一段时间一次性发送到服务器。

	public static void init() {
		/*
		 * 友盟统计分析
		 */
		// 设置是否debug模式，在debug模式下，会有log输出，方便调试 (默认true)
		MobclickAgent.setDebugMode(AppConfig.DEBUG);
		// 设置推广渠道
		// AnalyticsConfig.setChannel(App.sChannel);
		// 在线参数 动态配置
		// MobclickAgent.updateOnlineConfig(App.getContext());
		// 设置是否允许收集地理位置信息 （默认true）
		// MobclickAgent.setAutoLocation(true);
		// 设置session启动的沉默参数，详见30秒规则 （默认30000）
		// MobclickAgent.setSessionContinueMillis(1000);
		// 禁止默认的页面统计方式
		// MobclickAgent.openActivityDurationTrack(false);

		/*
		 * 腾讯统计分析
		 * 
		 * 数据上报策略
		 */
		// 禁止MTA打印日志
		StatConfig.setDebugEnable(AppConfig.DEBUG);
		// 根据情况，决定是否开启MTA对app未处理异常的捕获
		StatConfig.setAutoExceptionCaught(true);
		// WIFI网络实时上报 true false
		StatConfig.setEnableSmartReporting(true);

		/* 数据上报相关的设置 */
		// 设置最大缓存未发送消息个数（默认1024）
		// StatConfig.setMaxStoreEventCount(1024);
		// 缓存消息的数量超过阈值时，最早的消息会被丢弃。
		// （仅在发送策略为BATCH时有效）设置最大批量发送消息个数（默认30）
		// StatConfig.setMaxBatchReportCount(30);
		// （仅在发送策略为PERIOD时有效）设置间隔时间（默认为24*60，即1天）
		// StatConfig.setSendPeriodMinutes(30);
		// PERIOD上报策略-实时上报
		StatConfig.setStatSendStrategy(StatReportStrategy.INSTANT);

		/* APP设置 */
		// 会话时长（默认30000ms，30000ms回到应用的用户视为同一次会话）
		// StatConfig.setSessionTimoutMillis(3000);
		// 消息失败重发次数（默认3）
		// StatConfig.setMaxSendRetryCount(3);
		// 用户自定义时间类型事件的最大并行数量（默认1024）
		// StatConfig.setMaxParallelTimmingEvents(1024);
		// 设置安装渠道
		// StatConfig.setInstallChannel("Bee");
		// 设置app key
		// StatConfig.setAppKey(App.getContext(), "A65TWXR76YAY");
		// 设置统计功能开关（默认为true）如果为false，则关闭统计功能，不会缓存或上报任何信息。
		// StatConfig.setEnableStatService(true);
		// 设置session内产生的消息数量（默认为0，即无限制）
		// StatConfig.setMaxSessionStatReportCount(0);
		// 设置每天/每个进程时间产生的会话数量（默认为20）
		// StatConfig.setMaxDaySessionNumbers(100);
		// 设置单个事件最大长度（默认为4k，单位：bytes）4096
		// StatConfig.setMaxReportEventLength(4096);
	}

	public static void onPageStart(String start) {
		// 页面开始
		// 友盟统计页面
		MobclickAgent.onPageStart(start);
	}

	public static void onPageEnd(String end) {
		// 页面结束
		// 友盟统计页面
		MobclickAgent.onPageEnd(end);
	}

	public static void onResume(Context context) {
		// 页面开始
		// 腾讯统计
		StatService.onResume(context);
		// 友盟统计
		MobclickAgent.onResume(context);
	}

	public static void onPause(Context context) {
		// 页面结束
		// 腾讯统计
		StatService.onPause(context);
		// 友盟统计
		MobclickAgent.onPause(context);
	}

	public static void onStop(Context context) {
		// 腾讯统计
		StatService.onStop(context);
	}

	// 统计按钮被点击次数，统计对象：OK按钮
	public static void onTrackCustomClick(Context context, String eventId) {
		// 腾讯统计
		StatService.trackCustomEvent(context, eventId, "OK");
		// 友盟统计
		MobclickAgent.onEvent(context, eventId);
	}

	// 统计按钮被点击次数，统计对象：OK按钮
	public void onBtnClick(Context context, String eventId, String properties) {
		// 腾讯统计
		Properties prop = new Properties();
		prop.setProperty(properties, "OK");
		StatService.trackCustomKVEvent(context, eventId, prop);
		// 友盟统计
		MobclickAgent.onEvent(context, eventId);
	}

	public static void onMenuClick(Context context, String eventId, String id) {
		// 腾讯统计
		Properties prop = new Properties();
		prop.setProperty(id, "OK");
		StatService.trackCustomKVEvent(context, eventId, prop);
		// 友盟统计
		MobclickAgent.onEvent(context, eventId + "_" + id);
	}

	// 统计按钮被点击次数，统计对象：OK按钮
	public void onClick(Context context, int event, String value) {
		// 腾讯统计
		Properties prop = new Properties();
		prop.setProperty("Click", value);
		StatService.trackCustomKVEvent(context, EventName(event), prop);

		// 友盟统计
		HashMap<String, String> umMap = new HashMap<String, String>();
		umMap.put("Click", value);
		MobclickAgent.onEvent(context, EventName(event), umMap);
	}

	// 时长统计 开始
	public void BeginKVEvent(Context context, int event, String value) {
		// 腾讯统计
		Properties prop = new Properties();
		prop.setProperty("Begin", value);
		StatService.trackCustomBeginKVEvent(context, EventName(event), prop);
		// 友盟统计页面
		MobclickAgent.onPageStart(EventName(event));
	}

	// 时长统计 结束
	public void EndKVEvent(Context context, int event, String value) {
		// 腾讯统计
		Properties prop = new Properties();
		prop.setProperty("End", value);
		StatService.trackCustomEndKVEvent(context, EventName(event), prop);

		// 友盟统计
		MobclickAgent.onPageEnd(EventName(event));
	}

	// Process.kill 或者 System.exit 之类的方法杀死进程 ,保存统计数据
	public static void onKillProcess(Context context) {
		MobclickAgent.onKillProcess(context);
	}

	// 错误
	public void reportError(Context context, String errormsg) {
		StatService.reportError(context, errormsg);
	}

	// 异常
	public void reportError(Context context, Throwable errormsg) {
		StatService.reportException(context, errormsg);
	}

	private String EventName(int event) {
		String EventName = null;
		switch (event) {
		case 1:
			EventName = AppConfig.STATISTICS.EVENT_NAME_1;
			break;
		case 2:
			EventName = AppConfig.STATISTICS.EVENT_NAME_2;
			break;
		case 3:
			EventName = AppConfig.STATISTICS.EVENT_NAME_3;
			break;
		case 4:
			EventName = AppConfig.STATISTICS.EVENT_NAME_4;
			break;
		case 5:
			EventName = AppConfig.STATISTICS.EVENT_NAME_5;
			break;
		case 6:
			EventName = AppConfig.STATISTICS.EVENT_NAME_6;
			break;
		case 7:
			EventName = AppConfig.STATISTICS.EVENT_NAME_7;
			break;
		case 8:
			EventName = AppConfig.STATISTICS.EVENT_NAME_8;
			break;
		case 9:
			EventName = AppConfig.STATISTICS.EVENT_NAME_9;
			break;
		}

		return EventName;
	}

}
